Skip to content

feat!: new releasing system - #22

Merged
raven-wing merged 1 commit into
Problematy:mainfrom
raven-wing:ci-migration
Jul 7, 2026
Merged

feat!: new releasing system#22
raven-wing merged 1 commit into
Problematy:mainfrom
raven-wing:ci-migration

Conversation

@raven-wing

@raven-wing raven-wing commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Added reusable CI workflows for linting, testing, and end-to-end checks.
    • Introduced automated release creation and publishing for new versions.
  • Chores

    • Streamlined the release setup and version tracking for a cleaner release process.
    • Simplified project maintenance by removing outdated audit and release configuration.

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR restructures CI/CD by splitting the monolithic tests workflow into reusable lint, test, and e2e workflows invoked via workflow_call, and replaces semantic-release with release-please for versioning and PyPI publishing, removing related dependencies and Makefile targets.

Changes

Reusable CI Workflows

Layer / File(s) Summary
New reusable lint/test/e2e workflows
.github/workflows/lint.yml, .github/workflows/test.yml, .github/workflows/e2e.yml
Adds standalone workflow_call-triggered workflows for linting, coverage testing with optional Coveralls upload, and E2E Cypress testing against a Flask liveness endpoint.
Tests workflow refactored to call reusable workflows
.github/workflows/tests.yml
Adds workflow_call trigger and replaces inline lint/test/e2e steps with calls to the new reusable workflows, forwarding secrets and enabling coveralls upload.

Release-please migration and dependency cleanup

Layer / File(s) Summary
Release-please manifest and package config
.release-please-manifest.json, release-please-config.json
Adds manifest with root version 1.0.0 and config specifying Python release type for the platzky-msgbar package.
Release workflow replaces semantic-release
.github/workflows/release.yml
Replaces semantic-release job structure with tests, release-please, and publish jobs; PyPI publish now checks out the released tag and builds locally instead of downloading artifacts.
Remove semantic-release and pip-audit tooling
pyproject.toml, Makefile
Removes pip-audit and python-semantic-release dev dependencies, the [tool.semantic_release] config block, and the audit Makefile target.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant TestsWorkflow
  participant LintWorkflow
  participant TestWorkflow
  participant E2EWorkflow
  TestsWorkflow->>LintWorkflow: uses lint.yml
  TestsWorkflow->>TestWorkflow: uses test.yml (upload-coveralls true)
  TestsWorkflow->>E2EWorkflow: uses e2e.yml
  TestWorkflow-->>TestsWorkflow: coverage.lcov results
Loading
sequenceDiagram
  participant ReleaseWorkflow
  participant TestsJob
  participant ReleasePleaseAction
  participant PublishJob
  participant PyPI
  ReleaseWorkflow->>TestsJob: uses tests.yml
  ReleaseWorkflow->>ReleasePleaseAction: run release-please with GitHub App token
  ReleasePleaseAction-->>ReleaseWorkflow: release_created, tag_name
  ReleaseWorkflow->>PublishJob: trigger if release_created == true
  PublishJob->>PublishJob: checkout tag_name, poetry install, make build
  PublishJob->>PyPI: publish dist via gh-action-pypi-publish
Loading

Estimated code review effort: 3 (Moderate) | ~25 minutes

Poem

A rabbit hops through YAML fields so neat,
Splitting workflows into pieces small and sweet.
No more semantic-release to chase,
release-please now sets the pace.
pip-audit gone, the burrow feels light —
hop, build, and ship through the CI night! 🐇✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: migrating to a new release system.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@raven-wing
raven-wing merged commit 16965fc into Problematy:main Jul 7, 2026
3 of 4 checks passed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
.github/workflows/e2e.yml (1)

23-25: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Pin Cypress version and prefer a lockfile-based install.

npm install cypress with no lockfile in tests/e2e_tests pulls whatever version is currently published, risking flaky/non-reproducible e2e runs when a new Cypress release changes behavior.

♻️ Proposed fix
-    - name: Install Cypress
-      working-directory: tests/e2e_tests
-      run: npm install cypress
+    - name: Install Cypress
+      working-directory: tests/e2e_tests
+      run: npm ci

Requires committing a package.json/package-lock.json in tests/e2e_tests pinning the Cypress version.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/e2e.yml around lines 23 - 25, The Cypress install step is
unpinned and non-reproducible, so update the e2e setup to use a lockfile-based
install instead of npm install cypress. Add a pinned Cypress dependency in the
tests/e2e_tests package.json along with a matching package-lock.json, then
change the workflow step in the Cypress install job to install from that
lockfile using the existing tests/e2e_tests working-directory.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/e2e.yml:
- Line 10: The checkout step in the e2e workflow still persists Git credentials,
which is unsafe before running third-party install steps like poetry install and
npm install. Update the actions/checkout usage in the e2e workflow to disable
credential persistence, matching the other reusable workflows, so the job does
not leave repo credentials available to dependencies.

In @.github/workflows/lint.yml:
- Line 10: The checkout step currently uses actions/checkout@v6 with default
credential persistence, which leaves the GitHub token available to later build
steps. Update the checkout configuration in the workflow to explicitly disable
persisted credentials on the actions/checkout step so the token is not written
to git config before poetry install runs.

In @.github/workflows/test.yml:
- Line 16: The checkout step is persisting git credentials unnecessarily, which
exposes them to later third-party steps like poetry install. Update the
actions/checkout usage in the workflow to disable credential persistence by
setting the checkout action’s credential persistence option off, keeping the
rest of the job flow unchanged.

In @.github/workflows/tests.yml:
- Around line 35-39: Remove the unnecessary secrets inheritance from the test
job in the tests workflow. The reusable workflow invocation for test should rely
on the automatically provided GITHUB_TOKEN instead of passing all secrets
through secrets: inherit; update the test job configuration accordingly and keep
the existing uses and with settings unchanged.

---

Nitpick comments:
In @.github/workflows/e2e.yml:
- Around line 23-25: The Cypress install step is unpinned and non-reproducible,
so update the e2e setup to use a lockfile-based install instead of npm install
cypress. Add a pinned Cypress dependency in the tests/e2e_tests package.json
along with a matching package-lock.json, then change the workflow step in the
Cypress install job to install from that lockfile using the existing
tests/e2e_tests working-directory.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 420abfe9-ac9e-474d-bb2b-873b630132fa

📥 Commits

Reviewing files that changed from the base of the PR and between f6f3bb9 and 95b89b4.

⛔ Files ignored due to path filters (1)
  • poetry.lock is excluded by !**/*.lock
📒 Files selected for processing (9)
  • .github/workflows/e2e.yml
  • .github/workflows/lint.yml
  • .github/workflows/release.yml
  • .github/workflows/test.yml
  • .github/workflows/tests.yml
  • .release-please-manifest.json
  • Makefile
  • pyproject.toml
  • release-please-config.json
💤 Files with no reviewable changes (2)
  • Makefile
  • pyproject.toml

Comment thread .github/workflows/e2e.yml
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Disable credential persistence on checkout.

Same rationale as the other reusable workflows — this job also runs poetry install and npm install, both of which execute third-party code.

🔒 Proposed fix
     - uses: actions/checkout@v6
+      with:
+        persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: actions/checkout@v6
- uses: actions/checkout@v6
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 10-10: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/e2e.yml at line 10, The checkout step in the e2e workflow
still persists Git credentials, which is unsafe before running third-party
install steps like poetry install and npm install. Update the actions/checkout
usage in the e2e workflow to disable credential persistence, matching the other
reusable workflows, so the job does not leave repo credentials available to
dependencies.

Source: Linters/SAST tools

lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Disable credential persistence on checkout.

actions/checkout@v6 persists the GitHub token to the git config by default. Since poetry install runs third-party install/build code, a compromised dependency could read/misuse it.

🔒 Proposed fix
     - uses: actions/checkout@v6
+      with:
+        persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: actions/checkout@v6
- uses: actions/checkout@v6
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 10-10: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/lint.yml at line 10, The checkout step currently uses
actions/checkout@v6 with default credential persistence, which leaves the GitHub
token available to later build steps. Update the checkout configuration in the
workflow to explicitly disable persisted credentials on the actions/checkout
step so the token is not written to git config before poetry install runs.

Source: Linters/SAST tools

test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Disable credential persistence on checkout.

Same rationale as the other reusable workflows: poetry install executes third-party code, so a persisted git credential is unnecessary exposure.

🔒 Proposed fix
     - uses: actions/checkout@v6
+      with:
+        persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: actions/checkout@v6
- uses: actions/checkout@v6
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 16-16: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/test.yml at line 16, The checkout step is persisting git
credentials unnecessarily, which exposes them to later third-party steps like
poetry install. Update the actions/checkout usage in the workflow to disable
credential persistence by setting the checkout action’s credential persistence
option off, keeping the rest of the job flow unchanged.

Source: Linters/SAST tools

Comment on lines 35 to +39
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Poetry
run: pip install poetry==2.0.1
- name: Set up Python 3.10
uses: actions/setup-python@v6
with:
python-version: "3.10"
cache: 'poetry'
- name: Install dependencies
run: poetry install
- name: Run tests with coverage
run: make coverage
- name: Coveralls
uses: coverallsapp/github-action@v2
with:
path-to-lcov: "./coverage.lcov"
github-token: ${{ secrets.GITHUB_TOKEN }}
uses: ./.github/workflows/test.yml
with:
upload-coveralls: true
secrets: inherit

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Drop unnecessary secrets: inherit on the test job.

test.yml only uses secrets.GITHUB_TOKEN, which is automatically granted to called workflows without secrets: inherit. As-is, this exposes every repo/org/environment secret to test.yml unnecessarily, violating least privilege.

🔒 Proposed fix
   test:
     uses: ./.github/workflows/test.yml
     with:
       upload-coveralls: true
-    secrets: inherit
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Poetry
run: pip install poetry==2.0.1
- name: Set up Python 3.10
uses: actions/setup-python@v6
with:
python-version: "3.10"
cache: 'poetry'
- name: Install dependencies
run: poetry install
- name: Run tests with coverage
run: make coverage
- name: Coveralls
uses: coverallsapp/github-action@v2
with:
path-to-lcov: "./coverage.lcov"
github-token: ${{ secrets.GITHUB_TOKEN }}
uses: ./.github/workflows/test.yml
with:
upload-coveralls: true
secrets: inherit
test:
uses: ./.github/workflows/test.yml
with:
upload-coveralls: true
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 36-36: secrets unconditionally inherited by called workflow (secrets-inherit): this reusable workflow

(secrets-inherit)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/tests.yml around lines 35 - 39, Remove the unnecessary
secrets inheritance from the test job in the tests workflow. The reusable
workflow invocation for test should rely on the automatically provided
GITHUB_TOKEN instead of passing all secrets through secrets: inherit; update the
test job configuration accordingly and keep the existing uses and with settings
unchanged.

Source: Linters/SAST tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant